/*!
 * Ext JS Library 3.1+
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

Ext.ns("Ext.ux", "Ext.ux.plugins");

Ext.ux.PanelResizer = Ext.extend(Ext.util.Observable, {
    minHeight : 0,
    maxHeight : 10000000,

    constructor: function (config) {
        Ext.apply(this, config);
        this.events = {};
        Ext.ux.PanelResizer.superclass.constructor.call(this, config);
        this.addEvents("dragstart", "drag", "dragend");
    },

    init : function (p) {
        this.panel = p;

        if (this.panel.elements.indexOf("footer") == -1) {
            p.elements += ",footer";
        }
        p.on("render", this.onRender, this);
    },

    onRender : function (p) {
        this.handle = p.footer.createChild({
            cls : "x-panel-resize"
        });

        this.tracker = new Ext.dd.DragTracker({
            onStart   : this.onDragStart.createDelegate(this),
            onDrag    : this.onDrag.createDelegate(this),
            onEnd     : this.onDragEnd.createDelegate(this),
            tolerance : 3,
            autoStart : 300
        });
        this.tracker.initEl(this.handle);
        p.on("beforedestroy", this.tracker.destroy, this.tracker);
    },

	// private
    onDragStart : function (e) {
        this.dragging = true;
        this.startHeight = this.panel.el.getHeight();
        this.fireEvent("dragstart", this, e);
    },

	// private
    onDrag : function (e) {
        this.panel.setHeight((this.startHeight - this.tracker.getOffset()[1]).constrain(this.minHeight, this.maxHeight));
        this.fireEvent("drag", this, e);
    },

	// private
    onDragEnd : function (e) {
        this.dragging = false;
        this.fireEvent("dragend", this, e);
    }
});

Ext.net.ResourceMgr.notifyScriptLoaded();
